#include <iostream>
#include <string>
using namespace std;

#include <cstring>

#include <pthread.h>
#include <unistd.h>































// int main()
// {
//     cout<<sizeof(int32_t)<<endl;
//     cout<<sizeof(int64_t)<<endl;
//     cout<<sizeof(int)<<endl;
//     cout<<sizeof(nullptr)<<endl;
//     return 0;
// }


// void *threadRun(void *args)
// {
//     pthread_detach(pthread_self());
//     const char *name = static_cast<const char *>(args);
//     cout << name << endl;
//     sleep(3);
//     return nullptr;
// }

// int main()
// {
//     pthread_t t;
//     pthread_create(&t, nullptr, threadRun, (void *)"thread1 ");

//     sleep(1);
//     int ret = pthread_join(t, nullptr);
//     if (ret != 0)
//     {
//         cout << ret << ":" << strerror(ret) << endl;
//     }
//     else
//     {
//         cout << "join succesful" << endl;
//     }
//     return 0;
// }

// #define NUM 5
//  struct ThreadData
//  {
//      ThreadData(int top,int result,const string& name)
//          :_top(top)
//          ,_result(result)
//          ,_name(name)
//      {}

//     int _top;
//     int _result;
//     string _name;
//     int status=0;
// };

// void *threadRun(void *args)
// {
//     ThreadData*td=(ThreadData*)args;
//     for(int i=1;i<=td->_top;++i)
//     {
//         td->_result+=i;
//     }
//     return td;
// }

// int main()
// {
//     pthread_t t[NUM];

//     for(int i=0;i<NUM;++i)
//     {
//         ThreadData* args=new ThreadData(100+i*5,0,string("thread")+to_string(i));
//         int ret = pthread_create(t+i,nullptr,threadRun,args);
//         if(0!=ret)
//         {
//             cout<<"errno:"<<ret<<": "<<strerror(ret)<<endl;
//         }
//     }
//     for(int i=0;i<NUM;++i)
//     {
//         void*ret=nullptr;
//         pthread_join(t[i], &ret);
//         ThreadData* args=static_cast<ThreadData*>(ret);
//         if (args->status == 0)
//         {
//             cout << args->_name << " count [1," << args->_top << "] = " << args->_result << endl;
//         }
//         delete args;
//     }
//     cout<<"all thread quit!"<<endl;
//     return 0;
// }
